#include <stdio.h>
#include "sn_string.h"

/**********************************************************************
 * func  : sn_ltrim_mptr_str
 * input : u_char *p  待处理字符串
 *         u_char *trim   需要过滤的字符集
 * output: 
 * return: 过滤字符后的字符串指针
 * desp  : 去除字符串左空格函数
 *         此函数需要去除的字符为trim中的ASCII字符集
 *         此函数去除左空格的方式为移动指针p,不改变字符串中数据的位置
 * ********************************************************************/
u_char *
sn_ltrim_mptr_str(u_char *p, u_char *trim) {
	u_char  *cmp;

	while (p && *p) {
		cmp = trim;
		while (cmp && *cmp) {
			if (*p == *cmp) {
				p++;
				goto cmp_continue;
			}
			cmp++;
		}
		break;
		cmp_continue :;
	}
	return p;
}

/**********************************************************************
 * func  : sn_note_mchar_str
 * input : u_char *p  待处理字符串
 *         u_char note 注释符 
 * output: 字符串注释符的地方被替换为结束符
 * return: 
 * desp  : 去除字符串中注释符之后的字符
 * ********************************************************************/
void 
sn_note_mchar_str(u_char *p, char note) {
	while (p && *p) {
		if (*p == note && *(p-1) != '\\') {
			*p = 0x00;
			break;
		}
		p++;
	}
	return;
}

size_t
sn_str_cmp(const void *src, int src_len, const void *dest, int dest_len) {
	char *pSrc = (char *)src;
	char *pDest = (char *)dest;
	int i;

	if (src_len != dest_len) {
		return -1;
	}

	for (i = 0; i < src_len; i++) {
		if (pSrc[i] != pDest[i]) {
			return -1;
		}
	}

	return 0;
}

u_char *
sn_rfind_first_str(u_char *p, u_char c) {
	int32_t cur;

	cur = strlen(p);
	while(cur--) {
		if (c == *(p+cur)) {
			break;
		}
	}
	return p+cur+1;
}

void 
sn_lfind_last_mchar_str(u_char *p, u_char c) {
	int32_t cur;

	cur = strlen(p);
	while(cur--) {
		if (c == *(p+cur)) {
			break;
		}
	}
	*(p+cur+1) = '\0';

	return;
}

size_t
sn_lfind_last_cursor_str(u_char *p, u_char c) {
	int32_t cur;

	cur = strlen(p);
	while(cur--) {
		if (c == *(p+cur)) {
			break;
		}
	}

	return cur;
}
